﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class VolumesModel
    {
        public VOLUMES volume { get; set; }
        public LACRES lacre { get; set; }
        xcontEntities db = new xcontEntities();
        List<string> erros;

        public VolumesModel()
        {
            this.volume = new VOLUMES();
        }

        public VolumesModel(Int32? id)
        {
            if (id.HasValue && id != 0)
            {
                this.volume = db.VOLUMES.FirstOrDefault(t => t.ID_VOL == id);
            }
            else
            {
                this.volume = new VOLUMES();
            }
        }

        public List<string> UpdateValidate(FormCollection form)
        {
            this.erros = new List<string>();

            String MARCA_VOL = form["MARCA_VOL"];
            String NUMERACAO_VOL = form["NUMERACAO_VOL"];
            String QTDE_VOL = form["QTDE_VOL"];

            if (string.IsNullOrEmpty(MARCA_VOL))
            {
                erros.Add("É necessário informar a marca do volume.");
            }

            if (string.IsNullOrEmpty(NUMERACAO_VOL))
            {
                erros.Add("É necessário informar a numeração do volume.");
            }

            if (string.IsNullOrEmpty(QTDE_VOL))
            {
                erros.Add("É necessário informar a quantidade do volume.");
            }

            return erros;
        }

        public List<string> Update(FormCollection form)
        {
            this.erros = new List<string>();

            try
            {
                if (this.volume.ID_VOL == 0)
                {
                    db.AddToVOLUMES(this.volume);

                    Int32? ID_NF = Convertions.Inteiro(form["ID_NF"]);
                    db.AddToVOLUMES_NF(new VOLUMES_NF
                    {
                        VOLUMES = this.volume,
                        NOTAS_FISCAIS = db.NOTAS_FISCAIS.FirstOrDefault(t => t.ID_NF == ID_NF)
                    });
                }

                else
                {
                    this.volume = db.VOLUMES.FirstOrDefault(t => t.ID_VOL == this.volume.ID_VOL);
                }

                this.volume.ESPECIE_VOL = form["ESPECIE_VOL"];
                this.volume.MARCA_VOL = form["MARCA_VOL"];
                this.volume.NUMERACAO_VOL = form["NUMERACAO_VOL"];
                this.volume.PESOBRT_VOL = Convertions.Decimal(form["PESOBRT_VOL"]);
                this.volume.PESOLIQ_VOL = Convertions.Decimal(form["PESOLIQ_VOL"]);
                this.volume.QTDE_VOL = Convertions.Decimal(form["QTDE_VOL"]);

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);

                if (ex.InnerException != null)
                {
                    erros.Add(ex.InnerException.Message);
                }
            }

            return erros;
        }

        public List<string> Delete()
        {
            this.erros = new List<string>();

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.VOLUMES.FirstOrDefault(t => t.ID_VOL == this.volume.ID_VOL));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }

        public List<string> LacreUpdate(HttpRequestBase form)
        {
            this.erros = new List<string>();

            try
            {
                Int32? ID_LACRE = Convertions.Inteiro(form["ID_LACRE"]);
                
                if (ID_LACRE.HasValue && ID_LACRE != 0)
                {
                    this.lacre = db.LACRES.FirstOrDefault(t => t.ID_LACRE == ID_LACRE);
                }
                else
                {
                    db.AddToLACRES(this.lacre = new LACRES
                    {
                        VOLUMES = this.volume
                    });
                }

                this.lacre.NUMERO_LACRE = form["NUMERO_LACRE"];

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);

                if (ex.InnerException != null)
                {
                    erros.Add(ex.InnerException.Message);
                }
            }

            return erros;
        }

        public List<string> LacreDelete(Int32 ID_LACRE)
        {
            this.erros = new List<string>();

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.LACRES.FirstOrDefault(t => t.ID_LACRE == ID_LACRE));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }
    }
}
